package main

import (
	"fmt"
	"go_example/src/chatroom/server/database"
	"go_example/src/chatroom/server/model"
	"go_example/src/chatroom/server/process"
	"net"
	_ "os"
	"time"
)

//处理客户端的通信
func MasterProcess(conn net.Conn)  {
	defer conn.Close()

	//创建协程主控
	mp := &process.Processor{Conn: conn}
	err := mp.ReadMesProcess()
	if err != nil {
		fmt.Println("连接断开，客户端地址是：", conn.RemoteAddr().String(),"\nerr=", err)
		return
	}
}

//编写一个函数，完成对userDao的初始化任务
func initUserDao()  {
	//pool本身就是一个全局的变量
	model.MyUserDao = model.NewUserDao(database.Pool)
}

func main()  {
	//当服务器启动时，初始化redis 的连接池
	database.InitPool("127.0.0.1:6379",16,0, 300 * time.Second)
	initUserDao()
	//提示信息
	fmt.Println("8889端口已被服务监听")
	listen, err := net.Listen("tcp","127.0.0.1:8889")
	if err != nil {
		fmt.Println("initUserDao() net.Listen err=", err)
		return
	}
	//监听成功，等待客户端连接
	for true {
		fmt.Println("等待客户端连接...")
		conn, err := listen.Accept()
		if err != nil {
			fmt.Println("initUserDao() listen.Accept err=", err)
		} else {
			fmt.Println("连接成功，客户端地址是：", conn.RemoteAddr().String())
		}
		//一旦连接成功，则启动一个协程和客户端保持通信
		go MasterProcess(conn)
	}
	defer listen.Close()
}